{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c8292574",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "from pathlib import Path\n",
    "import json\n",
    "from datetime import datetime\n",
    "from ingestion import VectorDBIngestor, BM25Ingestor\n",
    "\n",
    "# 创建模拟报告目录和输出目录\n",
    "test_reports_dir = Path(\"test_reports\")\n",
    "test_output_dir = Path(\"test_vector_dbs\")\n",
    "\n",
    "# 确保目录存在\n",
    "test_reports_dir.mkdir(parents=True, exist_ok=True)\n",
    "test_output_dir.mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "# 创建模拟的 JSON 报告文件\n",
    "num_reports = 2\n",
    "# 定义机构列表\n",
    "institutions = [\"国金\", \"人行\"]\n",
    "file_names = [\n",
    "    \"中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号\",\n",
    "    \"8--中国人民银行关于开办粤港港币支票双向结算业务的通知（银发200226号）\"\n",
    "\n",
    "]\n",
    "times = [\n",
    "    \"200314\",\n",
    "    \"200226\"\n",
    "]\n",
    "chunks = [\n",
    "    [{\"text\": '''一、监管原则\n",
    "对省联社监管应遵循以下原则：\n",
    "（一）依法监管原则。银行业监管机构要严格按照法律、行政法规和规章以及国务院有关文件要求对省联社进行监管。\n",
    "（二）法人监管原则。主要做好对省联社法人治理、理事和高级管理层尽职的监管以及自身业务经营和履职行为的监管。\n",
    "（三）合规监管和风险监管并重的原则。重点做好省联社履职行为的合法合规性监管和省联社资金自营业务的风险监管。\n",
    "（四）银监会监管和银监局属地监管相结合的原则。银监会负责对省联社监管的组织指导，负责对机构、业务、理事和高级管理人员任职资格等准入事项的核准及行政处罚等重大事项的认定和处理，银监局主要负责对省联社日常监管工作和有关准入工作的初审。\n",
    "（五）总结评价和持续监管相结合的原则。银行业监管机构根据国务院委托在做好对省级人民政府管理农村信用社\n",
    "（含农村合作银行、农村商业银行，北京、上海和深圳农村商业银行除外，下同）工作情况总结评价的同时，\n",
    "要履行好对省联社作为一个具有独立法人资格的地方金融机构的监管工作。'''},\n",
    "{\"text\": '''二、对省联社法人机构监管\n",
    "（一）机构准入监管。银行业监管机构要严格按照《农村信用社省（自治区、直辖市）联合社管理暂行规定》（银监发〔2003〕14号）和《关于农村信用社省（自治区）联合社设立办事处的指导意见》（银监办发〔2004〕210号）明确的组建标准、程序和要求，把好省联社及其办事处的市场准入关，按照严格条件、程序合规和材料规范的原则做好省联社和办事处变更事项的审批工作。省联社的筹建、开业、变更和终止申请由银监局受理并初步审查，报银监会审查并决定；银监局负责颁发省联社的金融许可证；省联社办事处的设立、变更和终止由银监局受理并审查决定。\n",
    "（二）理事和高级管理人员资格和行为监管。银行业监管机构对省联社理事和高级管理人员以及办事处主任和副主任的任职资格实行核准制。要逐步实行理事长、副理事长和高级管理人员以及办事处主任和副主任的任职资格考试制度，考试不合格的不能取得任职资格。省联社及其办事处员工不得兼任地（市）农村信用合作社联合社、县（市）农村信用合作社联合社和县（市）农村信用合作联社的理事长、副理事长和高级管理人员。省联社理事和高级管理人员任职资格申请由银监局受理并初步审查，报银监会审查并决定；省联社办事处主任和副主任的任职资格由银监局受理并审查决定，对需要个案审核的办事处主任和副主任，其任职资格核准后须报银监会备案。\n",
    "银行业监管机构要重点加强对省联社理事和高级管理人员的行为监管。要逐步建立对理事长、副理事长和高级管理人员履职评价和问责制度。履职评价不称职的，要责成理事会（社员大会）及时予以罢免或解聘其职务。对有违法、违规及违纪行为或因失职造成资金损失、影响工作的理事和高级管理人员要实行问责制，并依据有关规定取消其任职资格或责成理事会（社员大会）及时予以罢免或解聘其职务。银监会和银监局根据履行职责的需要，可以约见省联社的理事和高级管理人员进行监管谈话，要求其对省联社履行行业自律管理职责和业务活动的有关情况作出说明，以加??强警示和约束作用。银监会负责对省联社理事长、副理事长和高级管理人员的履职行为进行监管。银监局协助银监会对省联社理事长、副理事长和高级管理人员履职行为进行监管，负责对省联社理事、办事处主任和副主任的履职行为进行监管。\n",
    "（三）业务准入监管。银行业监管机构要积极创造条件，完善新业务准入监管机制，支持和鼓励省联社创新业务品种，增强为农村信用社服务的功能。在风险可控、严格资金来源和用途、严格控制资金规模的前提下，银行业监管机构可以核准省联社开展资金自营业务，但不得对公众办理存贷款金融业务。省联社在同业拆借市场从事相关业务应经中国人民银行核准，并报银监局和银监会备案。省联社开办新业务由银监局受理并初步审查，报银监会审查并决定。\n",
    "（四）法人治理监管。银行业监管机构要督促省联社在建立法人治理架构的基础上，尽快建立科学有效的决策、监督、执行和激励约束机制，规范社员大会、理事会和高级管理层的职责、议事规则。对省联社理事会、高级管理层出现的人员空缺，银行业监管机构应当督促省联社尽快补选或聘用。要督促省联社明确界定社员大会、理事会与高级管理层在投资、财务和人事等方面权限，建立理事会向社员大会、高级管理层向理事会的定期报告制度。理事会要建立风险管理、审计、提名与薪酬等委员会和日常办事机构，并建立对理事、高级管理层绩效考核制度和评估机制。省联社召开社员大会、理事会，应至少提前5个工作日通知\n",
    "银监局并提供会议相关文件，银监局有权派人列席省联社的社员大会、理事会会议。省联社社员大会和理事会的决议应于会后10日内报银监局和银监会备案。\n",
    "（五）内部控制监管。银行业监管机构要采取窗口指导、督促检查等多种形式加强对省联社内控制度建设的指导，提高省联社理事会、高级管理层强化内部控制和风险防范的意识。要督促省联社建立内部控制制度，合理设定组织架构以及部门、机构职责。省联社要设立独立的合规部门和审计部门，建立合规检查和审计制度，并制定向理事会和高级管理层直接报告制度。资金自营和结算等部门要建立内部自行检查制度，以维持内部控制制度有效运作。合规部门要对省联社内部制度办法和行业自律管理办法的合法合规性及遵守情况进行监测及评估，并就合规风险情况向理事会和高级管理层提出建议。审计部门应定期对资金自营和结算等方面的内部控制制度进行测试和评估，提出内部控制制度改进意见，不断提高内部控制质量。省联社应实行外部审计制度，具体实施时间由各银监局根据实际情况确定，省联社聘用外部审计部门应事前报经银监局确认。外部审计部门不能履行职责的，银监局应督促省联社及时予以更换。省联社的内外部审计报告和评估报告应及时报银监局和银监会备案。\n",
    "（六）风险监管。银行业监管机构要督促省联社着重防范资金自营和结算业务等方面的信用风险、操作风险和市场风险，建立风险管理架构和组织结构，提高对风险的识别、计量、监测与控制能力，将风险控制在可承受范围之内。要督促省联社参照《商业银行市场风险管理指引》（中国银行业监督管理委员会令2004年第10号），明确市场风险管理的责任部门，建立审慎的授权管理制度，强化交易头寸管理，控制投资业务风险。要督促省联社制定防范资金交易和结算的操作风险政策和程序，并建立资金管理信息系统和计算机灾害备份系统，为主要系统准备充分的、经过调试的业务恢复计划。银监局要强化对省联社资金和结算的监督管理，做好专项检查，并强化后续落实。\n",
    "（七）财务监管。银行业监管机构要督促省联社按照《农村信用社财务管理实施办法》（国税发〔2000〕101号）和其他财务制度办法，执行对农村信用社计提管理费、购置固定资产和费用开支的规定。对从事资金自营业务的省联社，要督促其参照《金融企业呆账准备提取管理办法》（财金〔2005〕49号）足额提取一般准备、贷款损失准备、坏账准备和长期投资减值准备，并参照《金融企业会计制度》（财会〔2001〕49号）提取其他各项减值准备。银监局要加强对省联社执行财务制度情况的监督，特别是对管理费计提、呆账准备提取和固定资产购置资金来源合法合规性等方面的检查。对省联社未按照审慎原则计提呆账准备和减值准备的，要督促其限期予以纠正；对逾期不进行纠正的，银监局应禁止省联社进行利润分配。对省联社违反财务规定或平调农村信用社的资金购置固定资产，或无偿占用农村信用社固定资产的，银监局应责令省联社限期改正，并依据监管权限提出监管措施报银监会。\n",
    "（八）办事处监管。银监局要按照《关于农村信用社省（自治区）联合社设立办事处的指导意见》（银监办发〔2004〕210号）等有关文件要求实施对省联社办事处的监管。银监局可授权银监分局负责对省联社办事处的日常监管工作。银监局要督促省联社按法定程序设立办事处，规范办事处的职责与行为，按精简、高效的原则和金融从业条件配备主任、副主任及其他工作人员。办事处作为省联社的派出机构，须在省联社授权范围内依法履行职责。对办事处超越省联社授权以及干预农村信用社正常经营的行为，银监局要及时监督其改正，按照监管权限依法采取相应措施，对违法违规行为及其责任人，做出处罚决定或提出纪律处分建议并将办事处的违规行为通报省联社。\n",
    "（九）信息披露监管。银监局要督促省联社参照《商业银行信息披露暂行办法》（中国人民银行令〔2002〕第6号）等文件研究制定省联社信息披露的要素、程序和方法以及信息披露的规划，规范信息披露工作。从2006年起，省联社应于每年4月底前向全辖农村信用社披露上一年度的财务会计报告、资金自营业务风险状况、公司治理、年度重大事项、银行业监管机构对省联社的监管意见、省级人民政府对省联社的管理意见以及辖内农村信用社的整体状况和行业自律管理信息。行??法的制定和实施情况、行业审计情况、行业信息交流及培训情况、为农村信用社提供业务指导、依法维护社员社权益情况等。省联社应提前5个工作日将对外披露的信息报银监会和银监局备案。'''}\n",
    "],\n",
    "    [{\"text\": '''第六条　广东省辖内银行参加粤港港币支票联合会吉算业务必须具备以下条件：\n",
    "（一）持有中国人民银行颁发的《金融机构营业许可证》及国家工商行政管理机关颁发的《营业执照》，并经批准办理外汇存款、外汇票据结算业务。\n",
    "（二）遵守《中华人民共和国票据法》、《票据管理实施办法》和《支付结算办法》等法律法规。\n",
    "（三）按时出场，及时记账并办妥退票手续。\n",
    "（四）遵守票据交换的有关规定。'''},\n",
    "{\"text\": '''第七条　广东省辖内申请粤港港币支票结算的银行，应向人行广州分行或中国人民银行深圳市中心支行（以下简称人行深圳中支）提出申请，填制《参加粤港港币支票交换业务申请表》一式三份，附《金融机构营业许可证》（副本）和《营业执照》复印件各两份，经人行广州分行或人行深圳中支审核批准后才能参加交换。\n",
    "第八条　申请退出粤港港币支票交换的银行，应向人行广州分行或人行深圳中支提出书面申请，说明退出原因，经批准后不得再提出除退票外的粤港港币票据。\n",
    "第九条　参加粤港两地港币支票交换的支票，其付款期适用出票地法律，以银行受理时间为准。粤方出票人签发的支票，付款期为一个月；港方出票人签发的支票，付款期为六个月。到期日遇节假日顺延。'''}\n",
    "]\n",
    "]\n",
    "for i in range(num_reports):\n",
    "    report_data = {\n",
    "        \"metainfo\": {\n",
    "            \"sha1_name\": f\"report_{i}_sha1\",\n",
    "            # 生成当前时间作为报告时间\n",
    "            \"report_time\": times[i % len(times)],\n",
    "            \"file_name\": file_names[i % len(file_names)],\n",
    "            # 从机构列表中获取对应机构\n",
    "            \"institution\": institutions[i % len(institutions)]\n",
    "        },\n",
    "        \"content\": {\n",
    "            \"chunks\": chunks[i]\n",
    "        }\n",
    "    }\n",
    "    report_path = test_reports_dir / f\"report_{i}.json\"\n",
    "    with open(report_path, 'w', encoding='utf-8') as f:\n",
    "        json.dump(report_data, f, ensure_ascii=False, indent=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c9ec5e72",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Processing reports: 100%|██████████| 2/2 [00:00<00:00, 11290.19it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "构建 BM25Retriever，文档数：4\n",
      "BM25 索引保存至：test_vector_dbs\n",
      "测试完成，向量数据库已保存到 test_vector_dbs 目录。\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "ingestor = BM25Ingestor()\n",
    "# 处理报告文件\n",
    "ingestor.process_reports(test_reports_dir, test_output_dir)\n",
    "print(\"测试完成，向量数据库已保存到 test_vector_dbs 目录。\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "97c9acd5",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/burr/Projects/金融问答agent/rag_finetuning/ingestion.py:69: LangChainDeprecationWarning: The class `HuggingFaceEmbeddings` was deprecated in LangChain 0.2.2 and will be removed in 1.0. An updated version of the class exists in the :class:`~langchain-huggingface package and should be used instead. To use it run `pip install -U :class:`~langchain-huggingface` and import as `from :class:`~langchain_huggingface import HuggingFaceEmbeddings``.\n",
      "  embeddings = HuggingFaceEmbeddings(\n",
      "/home/burr/anaconda3/envs/rag/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
      "  from .autonotebook import tqdm as notebook_tqdm\n",
      "Processing reports: 100%|██████████| 2/2 [00:00<00:00, 10118.95it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Processed 2 reports and saved to a single vector database with metadata.\n",
      "测试完成，向量数据库已保存到 test_vector_dbs 目录。\n"
     ]
    }
   ],
   "source": [
    "# 初始化 VectorDBIngestor 类\n",
    "checkpoint_embedding = \"BAAI/bge-large-zh-v1.5\" # BAAI/bge-large-zh-v1.5\n",
    "ingestor = VectorDBIngestor(checkpoint=checkpoint_embedding)\n",
    "\n",
    "# 处理报告文件\n",
    "ingestor.process_reports_all(test_reports_dir, test_output_dir)\n",
    "print(\"测试完成，向量数据库已保存到 test_vector_dbs 目录。\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7163d63d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from retrieval import VectorRetriever, bm25Retriever"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "20df318d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from langchain.vectorstores import FAISS\n",
    "from langchain.embeddings import HuggingFaceEmbeddings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "89a541c9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- 结果 1 ---\n",
      "内容: 二、对省联社法人机构监管\n",
      "（一）机构准入监管。银行业监管机构要严格按照《农村信用社省（自治区、直辖市）联合社管理暂行规定》（银监发〔2003〕14号）和《关于农村信用社省（自治区）联合社设立办事处的指导意见》（银监办发〔2004〕210号）明确的组建标准、程序和要求，把好省联社及其办事处的市场准入关，按照严格条件、程序合规和材料规范的原则做好省联社和办事处变更事项的审批工作。省联社的筹建、开业、变...\n",
      "元数据: {'sha1_name': 'report_0_sha1', 'report_time': '200314', 'file_name': '中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号', 'institution': '国金'}\n",
      "\n",
      "--- 结果 2 ---\n",
      "内容: 一、监管原则\n",
      "对省联社监管应遵循以下原则：\n",
      "（一）依法监管原则。银行业监管机构要严格按照法律、行政法规和规章以及国务院有关文件要求对省联社进行监管。\n",
      "（二）法人监管原则。主要做好对省联社法人治理、理事和高级管理层尽职的监管以及自身业务经营和履职行为的监管。\n",
      "（三）合规监管和风险监管并重的原则。重点做好省联社履职行为的合法合规性监管和省联社资金自营业务的风险监管。\n",
      "（四）银监会监管和银监局属地监管相...\n",
      "元数据: {'sha1_name': 'report_0_sha1', 'report_time': '200314', 'file_name': '中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号', 'institution': '国金'}\n",
      "\n",
      "--- 结果 3 ---\n",
      "内容: 第六条　广东省辖内银行参加粤港港币支票联合会吉算业务必须具备以下条件：\n",
      "（一）持有中国人民银行颁发的《金融机构营业许可证》及国家工商行政管理机关颁发的《营业执照》，并经批准办理外汇存款、外汇票据结算业务。\n",
      "（二）遵守《中华人民共和国票据法》、《票据管理实施办法》和《支付结算办法》等法律法规。\n",
      "（三）按时出场，及时记账并办妥退票手续。\n",
      "（四）遵守票据交换的有关规定。...\n",
      "元数据: {'sha1_name': 'report_1_sha1', 'report_time': '200226', 'file_name': '8--中国人民银行关于开办粤港港币支票双向结算业务的通知（银发200226号）', 'institution': '人行'}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/burr/Projects/金融问答agent/rag_finetuning/retrieval.py:34: LangChainDeprecationWarning: The method `BaseRetriever.get_relevant_documents` was deprecated in langchain-core 0.1.46 and will be removed in 1.0. Use :meth:`~invoke` instead.\n",
      "  docs = self.faiss_retriever.as_retriever().get_relevant_documents(query)\n"
     ]
    }
   ],
   "source": [
    "faiss_retriever = VectorRetriever(\"test_vector_dbs/reports_faiss\", checkpoint=checkpoint_embedding)\n",
    "\n",
    "docs = faiss_retriever.get_relevant_documents(\"法律、行政法规和规章以及国务院有关文件要求\")\n",
    "\n",
    "# 手动过滤\n",
    "# filtered_docs = [doc for doc in docs if doc.metadata.get(\"institution\") == \"人行\"]\n",
    "\n",
    "# 取前 3 个\n",
    "# top_docs = filtered_docs[:3]\n",
    "for i, doc in enumerate(docs[:3]):\n",
    "    print(f\"\\n--- 结果 {i+1} ---\")\n",
    "    print(f\"内容: {doc.page_content[:200]}...\")\n",
    "    print(f\"元数据: {doc.metadata}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "6d3c3b87",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- 结果 1 ---\n",
      "内容: 二、对省联社法人机构监管\n",
      "（一）机构准入监管。银行业监管机构要严格按照《农村信用社省（自治区、直辖市）联合社管理暂行规定》（银监发〔2003〕14号）和《关于农村信用社省（自治区）联合社设立办事处的指导意见》（银监办发〔2004〕210号）明确的组建标准、程序和要求，把好省联社及其办事处的市场准入关，按照严格条件、程序合规和材料规范的原则做好省联社和办事处变更事项的审批工作。省联社的筹建、开业、变...\n",
      "元数据: {'sha1_name': 'report_0_sha1', 'report_time': '200314', 'file_name': '中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号', 'institution': '国金', 'score': np.float32(0.9383658), 'relevance_score': np.float32(0.9383658)}\n",
      "\n",
      "--- 结果 2 ---\n",
      "内容: 一、监管原则\n",
      "对省联社监管应遵循以下原则：\n",
      "（一）依法监管原则。银行业监管机构要严格按照法律、行政法规和规章以及国务院有关文件要求对省联社进行监管。\n",
      "（二）法人监管原则。主要做好对省联社法人治理、理事和高级管理层尽职的监管以及自身业务经营和履职行为的监管。\n",
      "（三）合规监管和风险监管并重的原则。重点做好省联社履职行为的合法合规性监管和省联社资金自营业务的风险监管。\n",
      "（四）银监会监管和银监局属地监管相...\n",
      "元数据: {'sha1_name': 'report_0_sha1', 'report_time': '200314', 'file_name': '中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号', 'institution': '国金', 'score': np.float32(0.96302515)}\n",
      "\n",
      "--- 结果 3 ---\n",
      "内容: 第六条　广东省辖内银行参加粤港港币支票联合会吉算业务必须具备以下条件：\n",
      "（一）持有中国人民银行颁发的《金融机构营业许可证》及国家工商行政管理机关颁发的《营业执照》，并经批准办理外汇存款、外汇票据结算业务。\n",
      "（二）遵守《中华人民共和国票据法》、《票据管理实施办法》和《支付结算办法》等法律法规。\n",
      "（三）按时出场，及时记账并办妥退票手续。\n",
      "（四）遵守票据交换的有关规定。...\n",
      "元数据: {'sha1_name': 'report_1_sha1', 'report_time': '200226', 'file_name': '8--中国人民银行关于开办粤港港币支票双向结算业务的通知（银发200226号）', 'institution': '人行', 'score': np.float32(0.9707757)}\n"
     ]
    }
   ],
   "source": [
    "docs = faiss_retriever.get_relevant_documents_with_score(\"法律、行政法规和规章以及国务院有关文件要求\")\n",
    "\n",
    "# 手动过滤\n",
    "# filtered_docs = [doc for doc in docs if doc.metadata.get(\"institution\") == \"人行\"]\n",
    "\n",
    "# 取前 3 个\n",
    "# top_docs = filtered_docs[:3]\n",
    "for i, doc in enumerate(docs[:3]):\n",
    "    print(f\"\\n--- 结果 {i+1} ---\")\n",
    "    print(f\"内容: {doc.page_content[:200]}...\")\n",
    "    print(f\"元数据: {doc.metadata}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "7370adcc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "--- 结果 1 ---\n",
      "内容: 第七条　广东省辖内申请粤港港币支票结算的银行，应向人行广州分行或中国人民银行深圳市中心支行（以下简称人行深圳中支）提出申请，填制《参加粤港港币支票交换业务申请表》一式三份，附《金融机构营业许可证》（副本）和《营业执照》复印件各两份，经人行广州分行或人行深圳中支审核批准后才能参加交换。\n",
      "第八条　申请退出粤港港币支票交换的银行，应向人行广州分行或人行深圳中支提出书面申请，说明退出原因，经批准后不得再提...\n",
      "元数据: {'sha1_name': 'report_1_sha1', 'report_time': '200226', 'file_name': '8--中国人民银行关于开办粤港港币支票双向结算业务的通知（银发200226号）', 'institution': '人行'}\n",
      "\n",
      "--- 结果 2 ---\n",
      "内容: 第六条　广东省辖内银行参加粤港港币支票联合会吉算业务必须具备以下条件：\n",
      "（一）持有中国人民银行颁发的《金融机构营业许可证》及国家工商行政管理机关颁发的《营业执照》，并经批准办理外汇存款、外汇票据结算业务。\n",
      "（二）遵守《中华人民共和国票据法》、《票据管理实施办法》和《支付结算办法》等法律法规。\n",
      "（三）按时出场，及时记账并办妥退票手续。\n",
      "（四）遵守票据交换的有关规定。...\n",
      "元数据: {'sha1_name': 'report_1_sha1', 'report_time': '200226', 'file_name': '8--中国人民银行关于开办粤港港币支票双向结算业务的通知（银发200226号）', 'institution': '人行'}\n",
      "\n",
      "--- 结果 3 ---\n",
      "内容: 二、对省联社法人机构监管\n",
      "（一）机构准入监管。银行业监管机构要严格按照《农村信用社省（自治区、直辖市）联合社管理暂行规定》（银监发〔2003〕14号）和《关于农村信用社省（自治区）联合社设立办事处的指导意见》（银监办发〔2004〕210号）明确的组建标准、程序和要求，把好省联社及其办事处的市场准入关，按照严格条件、程序合规和材料规范的原则做好省联社和办事处变更事项的审批工作。省联社的筹建、开业、变...\n",
      "元数据: {'sha1_name': 'report_0_sha1', 'report_time': '200314', 'file_name': '中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号', 'institution': '国金'}\n",
      "\n",
      "--- 结果 4 ---\n",
      "内容: 一、监管原则\n",
      "对省联社监管应遵循以下原则：\n",
      "（一）依法监管原则。银行业监管机构要严格按照法律、行政法规和规章以及国务院有关文件要求对省联社进行监管。\n",
      "（二）法人监管原则。主要做好对省联社法人治理、理事和高级管理层尽职的监管以及自身业务经营和履职行为的监管。\n",
      "（三）合规监管和风险监管并重的原则。重点做好省联社履职行为的合法合规性监管和省联社资金自营业务的风险监管。\n",
      "（四）银监会监管和银监局属地监管相...\n",
      "元数据: {'sha1_name': 'report_0_sha1', 'report_time': '200314', 'file_name': '中国银行业监督管理委员会关于印发农村信用社省（自治区直辖市）联合社管理暂行规定的通知银监发200314号', 'institution': '国金'}\n"
     ]
    }
   ],
   "source": [
    "bm25_retriever = bm25Retriever(\"test_vector_dbs/bm25.pkl\")\n",
    "\n",
    "\n",
    "# 查询\n",
    "query = \"法律、行政法规和规章以及国务院有关文件要求\"\n",
    "top_k = 4\n",
    "\n",
    "results = bm25_retriever.get_relevant_documents(query, top_k=top_k)\n",
    "\n",
    "# 展示结果\n",
    "for i, doc in enumerate(results[:top_k]):\n",
    "    print(f\"\\n--- 结果 {i+1} ---\")\n",
    "    print(f\"内容: {doc.page_content[:200]}...\")\n",
    "    print(f\"元数据: {doc.metadata}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd01de70",
   "metadata": {},
   "source": [
    "### 大模型重排"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "643d1a80",
   "metadata": {},
   "outputs": [],
   "source": [
    "from reranking import LLMReranker"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "648b82d0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Sliding Window Attention is enabled but not implemented for `sdpa`; unexpected results may be encountered.\n",
      "Loading checkpoint shards: 100%|██████████| 4/4 [00:10<00:00,  2.62s/it]\n"
     ]
    }
   ],
   "source": [
    "llmReranker = LLMReranker()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "65e8fa1a",
   "metadata": {},
   "outputs": [],
   "source": [
    "query = \"银监会监管和银监局属地监管\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "9d8ca118",
   "metadata": {},
   "outputs": [],
   "source": [
    "docs3 = docs[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "122206cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "retrieved_document = [docs3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a1b3e265",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reasoning': '检索到的文本块主要讨论了省联社的法人机构监管，包括机构准入监管、理事和高级管理人员资格监管、业务准入监管、法人治理监管、内部控制监管、风险监管、财务监管、办事处监管和信息披露监管等内容。虽然这些内容涵盖了银监会对于省联社的全面监管要求，但并未直接提到‘银监会监管和银监局属地监管’这一具体问题。因此，虽然文本内容与银监会监管有关，但没有直接回答查询中的特定方面。',\n",
       " 'relevance_score': 0.7}"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "llmReranker.get_rank_for_single_block(query, retrieved_document)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "d2b06d7f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'block_rankings': [{'reason': '<Block id=\"1\">: 提供了详细的省联社监管内容，包括机构准入、理事和高级管理人员监管、业务准入、法人治理、内部控制、风险监管、财务监管、办事处监管和信息披露监管，高度相关。',\n",
       "   'relevance_score': 0.9},\n",
       "  {'reason': '<Block id=\"2\">: 提到了银监会监管和银监局属地监管的原则，与查询直接相关。',\n",
       "   'relevance_score': 0.8},\n",
       "  {'reason': '<Block id=\"3\">: 主题与查询无关，讨论的是粤港港币支票双向结算业务。',\n",
       "   'relevance_score': 0.0},\n",
       "  {'reason': '<Block id=\"4\">: 主题与查询无关，讨论的是粤港港币支票双向结算业务。',\n",
       "   'relevance_score': 0.0}]}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "llmReranker.get_rank_for_multiple_blocks(query, docs)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "rag",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
